package com.ideviu.webapp.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.ideviu.model.Negocio;
import com.ideviu.model.User;
import com.ideviu.service.DataNotFoundException;
import com.ideviu.service.NegocioManager;

import org.springframework.security.core.context.SecurityContext;

@Component("negocioList")
@Scope("session")
public class NegocioList extends BasePage implements Serializable {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String query;
	@Autowired
    private NegocioManager negocioManager;

    public void setNegocioManager(NegocioManager negocioManager) {
        this.negocioManager = negocioManager;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    public String getQuery() {
        return query;
    }

    public NegocioList() {
        setSortColumn("id"); // sets the default sort column
    }

    
    public List<Negocio> getNegocios() {
    	log.debug("Miramos si es usuario administrador...");
    	SecurityContext  securityContext = (SecurityContext) getSession().getAttribute("SPRING_SECURITY_CONTEXT");
    	User user = (User) securityContext.getAuthentication().getPrincipal();
    	
    	if(user.isRoleAdmin()){
    		log.debug("ROLE_ADMIN: Obtenemos el listado de todos los negocios...");
    		if (query != null && !"".equals(query.trim())) {
                return negocioManager.search(query, Negocio.class);
            } else {
                return sort(negocioManager.getAll());
            }
    	} else {
    		log.debug("NOT ROLE_ADMIN: Obtenemos el listado de usuarios asociados al usuario con id = " + user.getId());
        	
        	if (query != null && !"".equals(query.trim())) {
                return negocioManager.search(query, Negocio.class);
            } else {
                try {
    				return sort(negocioManager.getNegociosByIdUsuario(user.getId().toString()));
    			} catch (DataNotFoundException e) {
    			    // Puede que no se recuperen datos.. Devolvemos una lista vacía.
    				return new ArrayList<Negocio>();
    	        }
            }
    	}
    }
    
  
    public String search() {
        return "success";
    }
}